package com.shell.petinformationmanagementsystem.controller;

import com.shell.petinformationmanagementsystem.entity.Pet;
import com.shell.petinformationmanagementsystem.mapper.PetMapper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

@Controller
public class PetController {
    @Resource
    PetMapper petMapper;
    List<Pet> petList = null; //存放查询结果的集合，用于thymeleaf展示
    Integer intId; //将得到的String id转为int使用

    @RequestMapping(value = "/index",method = RequestMethod.GET) //此方法仅仅是返回首页index.html
    public String index() {
        return "index";
    }

    @RequestMapping("/add.html") //此方法仅仅是为templates下的add.html配置映射路径
    public String a() {
        return "add";
    }

    @RequestMapping("/delByName.html")//此方法仅仅是为templates下的delByName.html配置映射路径
    public String del() {
        return "delByName";//为delByName.html配置路径
    }

    @RequestMapping("/update.html") //此方法仅仅是为templates下的update.html配置映射路径
    public String update() {
        return "update";
    }
    @RequestMapping("/updatePet.html")//此方法仅仅是为templates下的updatePet.html配置映射路径
    public String updatePet(){
        return "updatePet";
    }

    @RequestMapping(value = "/findAll",method = RequestMethod.GET)//Get方式请求
    public String findAll(ModelMap modelMap) {
        petList = petMapper.findAll(); //查询所有信息
        int res = petList.size();
        modelMap.addAttribute("msg", "查询到" + res + "条记录");
        modelMap.addAttribute("result", petList); //查询结果放入集合，thymeleaf展示
        return "result";
    }

    @RequestMapping(value = "/findById",method = RequestMethod.GET)//Get方式请求
    public String findById(String id, ModelMap modelMap) { //根据id查询宠物信息
        intId = Integer.parseInt(id);//由于接收到的参数为字符串，先转为整数
        Pet pet = petMapper.findById(intId);
        //此处需要判断，可能会查询不到结果，就会空指针异常
        if (pet != null) {
            petList = new ArrayList<>(); //不能与其他方法共用一个对象
            petList.add(pet);
            modelMap.addAttribute("msg", "查询到1条记录");
            modelMap.addAttribute("result", petList); //查询结果放入集合
        } else {
            modelMap.addAttribute("msg", "查询到0条记录");
        }
        return "result";
    }

    @RequestMapping(value = "/add",method = RequestMethod.POST)//Post方式
    //接收从添加宠物页面传递过来的参数，参数名需要与表单中的字段一致
    public String add(String petName, String age, String sex, String color, String type, String masterName, ModelMap modelMap) {
        Integer intAge = Integer.parseInt(age);
        Pet pet = new Pet(petName, intAge, sex, color, type, masterName);//id自增，不需要指定
        int res = petMapper.add(pet);
        petList = petMapper.findAll(); //查询所有信息
        modelMap.addAttribute("msg", "添加" + res + "条记录");
        modelMap.addAttribute("result", petList); //查询结果放入集合
        return "result";
    }

    @RequestMapping(value = "/delByName",method = RequestMethod.POST)//Post方式
    public String delByName(String petName, ModelMap modelMap) {
        int res = petMapper.delByName(petName);//根据宠物名字删除
        petList = petMapper.findAll(); //之后查询所有信息
        modelMap.addAttribute("msg", "删除" + res + "条记录");
        modelMap.addAttribute("result", petList); //查询结果放入集合
        return "result";
    }

    @RequestMapping(value = "/update",method = RequestMethod.POST)//Post方式
    //根据宠物id修改信息，前提是先查询确定数据库中是否存在，存在才能修改
    public String update(String id,ModelMap modelMap,HttpSession session) {
        intId = Integer.parseInt(id);//由于接收到的参数为字符串，先转为整数
        Pet pet = petMapper.findById(intId);
        //此处需要判断，id可能不存在，就会空指针异常
        if (pet != null) {
            session.setAttribute("id",id); //将id保存到session域中后续使用
            modelMap.addAttribute("pet",pet);//将查询到的信息填充到html页面，此处需要先保存
            modelMap.addAttribute("msg", "查询到1条记录");
            return "updatePet";
        } else {
            modelMap.addAttribute("msg", "查询到0条记录");
            modelMap.addAttribute("result", petList); //查询结果放入集合
            return "result";
        }
    }
    @RequestMapping(value = "/upda",method = RequestMethod.POST)//Post方式
    //根据id以及修改之后的宠物信息，修改数据库
    public String upda(String petName, String age, String sex, String color, String type, String masterName, ModelMap modelMap,HttpSession session){
        Integer intAge = Integer.parseInt(age);
        Integer id=Integer.parseInt((String) session.getAttribute("id")); //获取session中的id 判断需要修改的是哪一条数据
        Pet pet = new Pet(id,petName, intAge, sex, color, type, masterName);
        int res = petMapper.upda(pet);//根据pet的id修改记录
        petList = petMapper.findAll(); //查询所有信息
        modelMap.addAttribute("msg", "更新" + res + "条记录");
        modelMap.addAttribute("result", petList); //查询结果放入集合
        return "result";
    }

}
